#!/bin/sh
#
# zabbix_agentd_ctl 
#
# control script to stop/start/restart zabbix_agentd
# author: charlie collins
# date: 01.21.2002
#
# revised 09.21.2003
# (setup for Red Hat 7.3 with Zabbix 1.0 beta)
# (should work for other Red Hat and Sys V style init machines as well)
#
# (modeled after apache style control scripts)
# (this script can be placed in init.d and respective runlevel for startup usage)
# 
#
# The exit codes returned are:
#	0 - operation completed successfully
#	1 - 
#	2 - usage error
#	3 - zabbix_agentd could not be started
#	4 - zabbix_agentd could not be stopped
#	5 - zabbix_agentd could not be started during a restart
#	6 - zabbix_agentd could not be restarted during a restart
#
#
#

# **************
# config options
# **************
#
# (set config options to match your system settings) 

# base zabbix dir
BASEDIR=/opt/zabbix
# pid file (as of 1.0 beta 10)
PIDFILE=/var/tmp/zabbix_agentd.pid
# binary file
ZABBIX_AGENTD=$BASEDIR/bin/zabbix_agentd


# **************
# logic section (below here) does NOT normally need any modification
# **************

# establish args
ERROR=0
ARGV="$@"
if [ "x$ARGV" = "x" ] ; then 
    ARGS="help"
fi


# perform action based on args
for ARG in $@ $ARGS
do
	# check if PIDFILE exists and ensure is not zero size and react accordingly
	if [ -f $PIDFILE  ] && [ -s $PIDFILE ] ; then
	    PID=`cat $PIDFILE`
		if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then
	        STATUS="zabbix_agentd (pid $PID) running"
	        RUNNING=1			
	    else
	        STATUS="zabbix_agentd (pid $PID?) not running"
	        RUNNING=0			
	    fi
    else
	    STATUS="zabbix_agentd (no pid file) not running"
	    RUNNING=0		
    fi
	
	# parse arg and react accordingly
    case $ARG in
    
	start)
	if [ $RUNNING -eq 1 ]; then
	    echo "$0 $ARG: zabbix_agentd (pid $PID) already running"
	    continue
	fi
	if $ZABBIX_AGENTD ; then
	    echo "$0 $ARG: zabbix_agentd started"
	else
	    echo "$0 $ARG: zabbix_agentd could not be started"
	    ERROR=3
	fi
	;;
    
	stop)
	if [ $RUNNING -eq 0 ]; then
	    echo "stop called - in running eq 0"
		echo "$0 $ARG: $STATUS"
	    continue
	fi
	if kill $PID ; then
			echo "$0 $ARG: zabbix_agentd process(es) stopped"
	    else
	        echo "$0 $ARG: zabbix_agentd process(es) could not be stopped"
	        ERROR=4
	    fi
	;;
    
	restart)
	if [ $RUNNING -eq 0 ]; then
	    echo "$0 $ARG: zabbix_agentd not running, trying to start"
	    if $ZABBIX_AGENTD ; then
		    echo "$0 $ARG: zabbix_agentd started"
	    else
		    echo "$0 $ARG: zabbix_agentd could not be started"
			ERROR=5
	    fi
	else
	    if kill $PID ; then
		    if $ZABBIX_AGENTD ; then
	            echo "$0 $ARG: zabbix_agentd restarted"
			else
				echo "$0 $ARG: zabbix_agentd could not be started"
				ERROR=3
			fi
		else
		    echo "$0 $ARG: zabbix_agentd could not be restarted"
		    ERROR=6
		fi	    
    fi		
	;;
    
	*)             
	
	echo "usage: $0 (start|stop|restart|help)"
	cat <<EOF

start      - start zabbix_agentd
stop       - stop zabbix_agentd
restart    - restart zabbix_agentd if running by sending a SIGHUP or start if not running
help       - this screen

EOF

    ERROR=2
    ;;

    esac

done

exit $ERROR



